#include "head.h"

/* Usage:  */
int main(void){                                  

    // 启动子进程
   son_status_t list[4];
   initPoll(list, 4);

   // 初始化网络监听连接
   // bind和listen
   int socket_fd;
   initSocket(&socket_fd, "192.168.229.128", "8080");

    // 初始化epoll，获得epoll对象
    int epoll_fd = epoll_create(1);
    // 放入监听，建立三次握手，和本地socket进行通信
    addEpoll(epoll_fd, socket_fd);
    for(int i=0; i<4; i++)
    {
        addEpoll(epoll_fd, list[i].local_socket);
    }

    while(1)
    {
        // 就绪集合
        struct epoll_event events[10];
        memset(events, 0, sizeof(events));
        // 监听就绪集合
        int epoll_num = epoll_wait(epoll_fd, events, 10, -1);

        for(int i=0; i<epoll_num; i++)
        {
            int fd = events[i].data.fd;

            if(fd == socket_fd)
            {
                // 有新链接进来
                int net_fd = accept(socket_fd, NULL, NULL);
                    
                // 把这个新链接对象交给空闲的子进程
                toSonNetFd(list, 4, net_fd);

                // 就算关闭还是会发送数据完成
                close(net_fd);
                continue;
            }
            // 有子进程发信息
            for(int j=0; j<4; j++)
            {
                if(list[j].local_socket == fd)
                {
                    char buf[60] = {0 };
                    recv(fd, buf, sizeof(buf), 0);
                    // 说明
                    list[j].flag = FREE;
                    continue;

                }
            }
        }
    }

    return 0;
}


